iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

在 Kubernetes 中,網路模型確保了集群內的 Pod 之間能夠互相溝通,並且集群外部的流量能夠正確地路由到集群內的服務。

Kubernetes 網路模型遵循以下幾個主要原則:

  1. 每個 Pod 都有唯一的 IP 地址:在 Kubernetes 中,每個 Pod 都會獲得一個唯一的 IP 地址,這樣它可以像獨立主機一樣進行網路通信。Pod 之間的溝通是通過 IP 地址實現的,而不需要依賴主機的端口轉發。

  2. Pod 之間可以直接溝通:Kubernetes 允許集群中的所有 Pod 之間直接溝通,不需要經過 NAT(Network Address Translation)。這意味著所有 Pod 的 IP 地址都是可路由的。

  3. 服務(Service)提供了穩定的訪問方式:Kubernetes 使用服務(Service)來抽象化 Pod 的集合,並提供了一個穩定的入口點來訪問這些 Pod。服務通常會為 Pod 提供一個固定的 IP 地址和一個 DNS 名稱,並使用 kube-proxy 來實現流量的負載均衡和轉發。

  4. 網路策略:Kubernetes 支持網路策略(Network Policies),這是一種用於控制 Pod 之間溝通的安全機制。網路策略允許用戶定義哪些 Pod 可以與哪些 Pod 進行溝通,從而實現細粒度的安全控制。

  5. CNI 插件:Kubernetes 通過 CNI 插件來實現底層的網路功能。這些插件負責配置 Pod 的網路接口,分配 IP 地址,設置路由等。常見的 CNI 插件包括 Calico、Flannel、Weave 等。


kube-proxy

Kube-proxy 是 Kubernetes 中負責實現網路代理和服務負載均衡。

它在每個節點上運行,主要負責將流量轉發到正確的後端服務。

其工作原理可以概括為以下幾個步驟:

  1. 服務反映:kube-proxy 會監聽 Kubernetes API 中定義的服務,並根據這些定義配置本地的網路代理設置。這樣,每個節點上的 kube-proxy 都會知道如何將流量轉發到正確的服務上。

  2. 流量轉發

    • 簡單轉發:kube-proxy 支持 TCP、UDP 和 SCTP 協議的基本流量轉發。當接收到這些協議的流量時,kube-proxy 可以根據服務的配置將其轉發到相應的 Pod。
    • 迴圈轉發:對於一些服務,它可能會將流量分發到一組後端 Pod 上,kube-proxy 可以執行輪詢負載均衡(Round Robin)或其他負載均衡策略來分發流量。
  3. 負載均衡:kube-proxy 能夠根據服務的需求將流量均衡地分配到多個後端 Pod 上,以確保服務的高可用性和性能。

在 Kubernetes 的 kube-proxy 中,流量轉發可以通過三種不同的模式實現:

1. Userspace

kube-proxy 會在每個節點上啟動一個代理 process。

當有流量到達服務時,kube-proxy 會在 userspace 中處理這些流量,根據服務的配置將其轉發到正確的 Pod。

  • 優點:簡單易用,不需要修改系統網路配置。
  • 缺點:性能相對較低,因為所有流量都需要經過 userspace 的處理,這會引入額外的延遲和開銷。

2. iptables

kube-proxy 會使用 Linux 的 iptables 工具來實現流量轉發。

kube-proxy 會設置 iptables 規則,根據服務的配置將流量轉發到正確的 Pod。

  • 優點:性能較高,因為流量轉發是由內核層級的 iptables 處理的,這樣可以減少延遲和開銷。
  • 缺點:複雜性較高,需要管理和維護 iptables 規則。此外,iptables 模式在大規模服務或大量服務的情況下可能會遇到性能瓶頸。

3. IPVS

kube-proxy 使用 Linux 的 IP Virtual Server (IPVS) 來實現流量轉發。

IPVS 是一種高效的負載均衡技術,可以處理大量的連接和流量。

  • 優點:性能非常高,能夠支持大規模的服務和高流量的環境。IPVS 的負載均衡策略也更為靈活和高效。
  • 缺點:需要啟用 IPVS 模組,並且配置相對較為複雜。此外,對於一些較舊的 Linux 內核版本,可能不支持 IPVS。
Mode Description
Userspace 簡單但性能較低,適合較小的集群或開發環境
iptables 性能較高,但在大規模環境下可能遇到性能問題
ipvs 性能最佳,適合高流量和大規模集群,但配置較為複雜

Container Network Interface (CNI)

它定義了容器和主機之間如何建立網路連接的標準規範,使得不同的容器運行時和網路插件能夠無縫地協同工作。

a

Figure Source

CNI 的主要功能

  1. 網路插件:CNI 定義了一組標準的網路插件接口,這些插件負責為容器配置網路,包括 IP 地址分配、路由配置等。
  2. 網路管理:CNI 插件可以實現不同的網路功能,例如橋接網路、覆蓋網路、網路策略等。
  3. 靈活性:用戶可以根據需求選擇或開發符合 CNI 規範的網路插件,實現自定義的網路方案。

Reference


上一篇
[Day 8] kubelet
下一篇
[Day 10] Kube-API Server
系列文
關於新手會想知道Kubernetes的幾件事情30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言